package com.pengpeng.zookeeper.service;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.data.Stat;

import java.util.List;

/**
 * @author 彭鹏
 * @date 2021/10/21.
 */
public interface ZookeeperService {
    /**
     * 创建znode结点
     *
     * @param path 结点路径
     * @param data 结点数据
     * @return true 创建结点成功 false表示结点存在
     */
    boolean addNodeData(String path, String data, CreateMode mode);
    /**
     * 创建永久znode结点
     *
     * @param path 结点路径
     * @param data 结点数据
     * @return true 创建结点成功 false表示结点存在
     */
    boolean addPNode(String path, String data);
    /**
     * 创建临时znode结点
     *
     * @param path 结点路径
     * @param data 结点数据
     * @return true 创建结点成功 false表示结点存在
     */
    boolean addENode(String path, String data);

    /**
     * 修改节点
     * @param path 节点路径
     * @param data 节点数据
     * @return
     */
    boolean updateNode(String path, String data);

    /**
     * 删除节点
     * @param path 节点路径
     * @return
     */
    boolean deleteNode(String path);

    /**
     * 获取节点数据
     * @param path 节点路径
     * @return
     */
    String getNodeData(String path);
/**
 * 获取子节点
 * @param path 节点路径
 * @param nodeWatch 是否复用zookeeper中默认的watch
 * @return
 */
    List<String> getChildrenNode(String path, boolean nodeWatch);

    /**
     * 获取子节点
     * @param path 节点路径
     * @param watcher 监听类型 创建/删除/更新
     * @return
     */
    List<String> getChildrenNode(String path, Watcher watcher);

    Stat existNode(String path, Watcher watcher);

    Stat existNode(String path, boolean nodeWatch);
}
